﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LJ.StreamSystem.Abstractions;


public interface IAggregateStreamSystemHandler<TAggregateEventData, TAggregateSummaryEventData>
    where TAggregateEventData : new()
    where TAggregateSummaryEventData : new()
{

    Task<string> SelectKeyAsync(TAggregateEventData aggregateEventData, IDictionary<string, string> heads);

    Task<TAggregateSummaryEventData> InitAsync(IDictionary<string, string> heads);

    Task<TAggregateSummaryEventData> SummaryAsync(TAggregateEventData aggregateEventData, TAggregateSummaryEventData aggregateSummaryEventData, IDictionary<string, string> heads);
}
